package com.login_php.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;

import com.login_php.actions.BaseServiceAction;
import com.login_php.domain.commons.TipoUsuario;
import com.login_php.domain.commons.Usuario;
import com.login_php.domain.user.UserJson;
import com.login_php.services.TipoUsuarioService;

public class GetAllUSuariosService extends BaseServiceAction{

	private List<UserJson> usuarios;

	@Override
	public String doExecute() {
		
		List<Usuario> usuarios = getAplicationEng().getUsuarioEng().getAllUsuarios();
		Map<Integer, String> tipos = getTiposByUsers(usuarios);
		
		if(CollectionUtils.isNotEmpty(usuarios) && MapUtils.isNotEmpty(tipos)){
			this.usuarios = new ArrayList<UserJson>();
			for(Usuario usuario : usuarios){
				UserJson json = new UserJson();
				json.setId(usuario.getId());
				json.setUser(usuario.getUsuario());
				json.setTipoUsuario(tipos.get(usuario.getTipoUsuario()));
				this.usuarios.add(json);
			}
			
		}
		
		return SUCCESS;
	}
	
	private Map<Integer, String> getTiposByUsers(List<Usuario> usuarios){
		if(CollectionUtils.isNotEmpty(usuarios)){
			HashSet<Integer> ids = new HashSet<Integer>();
			for(Usuario usuario : usuarios){
				ids.add(usuario.getTipoUsuario());
			}
			
			Map<Integer, String> tipos = new HashMap<Integer, String>();
			TipoUsuario tipo = null;
			for(Integer id : ids){
				tipo = TipoUsuarioService.getTipoUsuarioById(id);
				tipos.put(id, (tipo == null) ? "" : tipo.getNome());
			}
			return tipos;
		}
		
		return null;
	}
	
	public List<UserJson> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<UserJson> usuarios) {
		this.usuarios = usuarios;
	}

}
